package customerEnter.Frame.Utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期处理相关工具类
 * 
 * 类名称：DateUtils 类描述： 创建人：dy 创建时间：2016-3-30 上午9:42:06
 * 
 */
public class DateUtils {
	/**
	 * 格式 yyyyMM
	 */
	public static final String	DATE_JFP_STR	= "yyyyMM";
	/**
	 * 格式 yyyy-MM-dd HH:mm:ss
	 */
	public static final String	DATE_FULL_STR	= "yyyy-MM-dd HH:mm:ss";
	/**
	 * 格式 yyyy-MM-dd
	 */
	public static final String	DATE_SMALL_STR	= "yyyy-MM-dd";
	/**
	 * 格式 yyMMddHHmmss
	 */
	public static final String	DATE_KEY_STR	= "yyMMddHHmmss";

	/**
	 * 使用预设格式提取字符串日期
	 * 
	 * @param strDate
	 *            日期字符串
	 * @return
	 */
	public static Date parse(String strDate) {
		return parse(strDate, DATE_FULL_STR);
	}

	/**
	 * 獲取系統當前的年份
	 */
	public static Integer getYear() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.YEAR);
	}

	/**
	 * 獲取系統當前的月份
	 * 
	 */
	public static Integer getMoth() {
		Calendar calendar = Calendar.getInstance();

		return calendar.get(Calendar.MONTH) + 1;
	}

	/**
	 * 獲取系統當前的天數
	 */
	public static Integer getDay() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 使用用户格式提取字符串日期
	 * 
	 * @param strDate
	 *            日期字符串
	 * @param pattern
	 *            日期格式
	 * @return
	 */
	public static Date parse(String strDate, String pattern) {
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		try {
			return df.parse(strDate);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 两个时间比较
	 * 
	 * @param date
	 * @return
	 */
	public static int compareDateWithNow(Date date1) {
		Date date2 = new Date();
		int rnum = date1.compareTo(date2);
		return rnum;
	}

	/**
	 * 两个时间比较(时间戳比较)
	 * 
	 * @param date
	 * @return
	 */
	public static int compareDateWithNow(long date1) {
		long date2 = dateToUnixTimestamp();
		if (date1 > date2) {
			return 1;
		} else if (date1 < date2) {
			return -1;
		} else {
			return 0;
		}
	}

	/**
	 * 获取系统当前时间
	 * 
	 * @return
	 */
	public static String getNowTime() {
		SimpleDateFormat df = new SimpleDateFormat(DATE_FULL_STR);
		return df.format(new Date());
	}

	/**
	 * 获取系统当前时间
	 * 
	 * @return type 格式
	 */
	public static String getNowTime(String type) {
		SimpleDateFormat df = new SimpleDateFormat(type);
		return df.format(new Date());
	}

	/**
	 * 获取系统当前计费期
	 * 
	 * @return
	 */
	public static String getJFPTime() {
		SimpleDateFormat df = new SimpleDateFormat(DATE_JFP_STR);
		return df.format(new Date());
	}

	/**
	 * 将当前日期转换成毫秒
	 * 
	 * @return long 时间戳
	 */
	public static long dateToUnixTimestamp() {
		long timestamp = new Date().getTime();
		return timestamp;
	}

	/**
	 * 獲取某年月份的天數
	 */
	public static Integer getMonthDay(Integer year, Integer month) {
		Calendar a = Calendar.getInstance();
		a.set(Calendar.YEAR, year);
		a.set(Calendar.MONTH, month - 1);
		a.set(Calendar.DATE, 1);
		a.roll(Calendar.DATE, -1);
		int maxDate = a.get(Calendar.DATE);
		return maxDate;
	}

	/**
	 * 日期轉換為字符串
	 */
	public static String DataToString(Date date, String type) {
		SimpleDateFormat formatter = new SimpleDateFormat(type);
		return formatter.format(date);
	}

	/**
	 * 后多少天 的時間
	 */
	public static Date getNextDay(Date date, int day) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.DAY_OF_MONTH, +day);// +1今天的时间加一天
		date = calendar.getTime();
		return date;
	}

	/**
	 * 前多少天 的時間
	 */
	public static Date getToptDay(Date date, int day) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.DAY_OF_MONTH, -day);// +1今天的时间加一天
		date = calendar.getTime();
		return date;
	}

	/**
	 * 前多少小時 的時間
	 */
	public static Date getToptHH(Date date, int HH) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.HOUR_OF_DAY, -HH);// +1今天的时间加一天
		date = calendar.getTime();
		return date;
	}

	/**
	 * 前多少小時 的時間
	 */
	public static Date getNestHH(Date date, int HH) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.HOUR_OF_DAY, +HH);// +1今天的时间加一天
		date = calendar.getTime();
		return date;
	}

}